package com.jf.cloud.service.sysmanager.common.util;

import javax.persistence.Table;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * TODO  javaBean 的常用操作
 * @author ouyang 创建时间：2012-06-29 09:30:35
 */
public class BeanUtil {
	static Log log = LogFactory.getLog(BeanUtil.class);
	/**
	 * 复制 bean 属性到另外一个对象
	 * source:原的对象
	 * target：目标对象
	 */
	public static void copyBeanValue(Object source,Object target) {
		try {
			BeanUtils.copyProperties(target, source);
		} catch (Exception e) {
			log.error("复制对象属性出错了", e);
		}  
	}
	/**
	 * 设置一个对象的 属性值
	 * 给的属性的名称
	 * source:目标对象
	 * PropetyName:属性名称
	 * value:需要设置的值
	 */
	public static void setBeanValue(Object source,String PropetyName,Object value) {
		try {
			BeanUtils.setProperty(source, PropetyName, value);
		} catch (Exception e) {
			log.error("设置对象的属性值 出错了", e);
		}  
	}
	/**
	 * 获取一个对象的 属性值
	 * 给的属性的名称
	 * source:目标对象
	 * PropetyName:属性名称
	 */
	public static String getBeanValue(Object source,String propetyName) {
		String rString  ="";
		try {
			 rString  =BeanUtils.getSimpleProperty(source, propetyName);
		} catch (Exception e) {
			log.error("获取对象的属性值 出错了", e);
		}  
		return rString;
	}
	/**
	 * 属性名 -->  字段名称
	 * 大写并且用下划线链接
	 */
	public static String propetyNameToColumnName(String propetyName) {
		StringBuffer columnName = new StringBuffer(20);
		char[] nameStr = propetyName.toCharArray();
		for (int i = 0; propetyName!=null && i < nameStr.length; i++) {
			if(Character.isUpperCase(nameStr[i])){ // 大写字母 需要加下划线
				columnName.append("_").append(nameStr[i]);
			}else{ // 小写字母需要处理为 大写
				columnName.append(nameStr[i]);
			}
		}
		return columnName.toString().toUpperCase(); //统一转换为大写
	}
	/**
	 * 字段名称 -- > 属性名
	 */
	public static String columnNameToPropetyName(String columnName) {
		StringBuffer propetyName = new StringBuffer(20);
		char[] nameStr = columnName.toLowerCase().toCharArray();
		for (int i = 0; columnName!=null && i < nameStr.length; i++) {
			if("_".equals((nameStr[i])+"")){ // 大写字母 需要加下划线
				propetyName.append((nameStr[++i]+"").toUpperCase());
			}else{ // 小写字母需要处理为 大写
				propetyName.append(nameStr[i]);
			}
		}
		return propetyName.toString(); 
	}
	
	/**
	 * 根据现有规则获取 Controller Service Pojo 对应的表名称
	 */
	@SuppressWarnings("all")
	public static String getTableName(Class clazz) {
		String rString = "";
		if (clazz != null && clazz.isAnnotationPresent(Table.class)) {
			rString = ((Table) clazz.getAnnotation(Table.class)).name();
		} else { // 没有使用 annotation 默认
			String natureName = clazz.getSimpleName();
		    char na[] = natureName.toCharArray();
			for (int i = 0; i < na.length; i++) {
				if (Character.isUpperCase(na[i]) && i != 0) {
					rString += "_";
				}
				rString += Character.toLowerCase(na[i]);
			}
		}
		return rString;
	}
	
}
